<template>
    <div class="uploader">
        <div class="uploader-view" v-for="item in uploadList">
            <template v-if="item.status === 'finished'">
                <img :src="item.url">
                <div class="uploader-view-cover">
                    <Icon type="ios-eye-outline" @click.native="handleView(item.name)"></Icon>
                    <Icon type="ios-trash-outline" @click.native="handleRemove(item)"></Icon>
                </div>
            </template>
            <template v-else>
                <Progress v-if="item.showProgress" :percent="item.percentage" hide-info></Progress>
            </template>
        </div>
        <Upload class="uploader-control"
                ref="upload"
                :show-upload-list="false"
                :default-file-list="defaultList"
                :on-success="handleSuccess"
                :format="['jpg','jpeg','png']"
                :max-size="2048"
                :on-format-error="handleFormatError"
                :on-exceeded-size="handleMaxSize"
                :before-upload="handleBeforeUpload"
                multiple
                type="drag"
                action="//jsonplaceholder.typicode.com/posts/">
            <div class="uploader-input"><Icon type="plus-round"></Icon></div>
        </Upload>
        <Modal title="View Image" v-model="visible">
            <img :src="'https://o5wwk8baw.qnssl.com/' + imgName + '/large'" v-if="visible" style="width: 100%">
        </Modal>
    </div>
</template>
<script>
    export default {
        data () {
            return {
                defaultList: [
                    /*
                    {
                        'name': 'a42bdcc1178e62b4694c830f028db5c0',
                        'url': 'https://o5wwk8baw.qnssl.com/a42bdcc1178e62b4694c830f028db5c0/avatar'
                    }
                    */
                ],
                imgName: '',
                visible: false,
                uploadList: []
            }
        },
        methods: {
            handleView (name) {
                this.imgName = name;
                this.visible = true;
            },
            handleRemove (file) {
                const fileList = this.$refs.upload.fileList;
                this.$refs.upload.fileList.splice(fileList.indexOf(file), 1);
            },
            handleSuccess (res, file) {
                file.url = 'https://o5wwk8baw.qnssl.com/7eb99afb9d5f317c912f08b5212fd69a/avatar';
                file.name = '7eb99afb9d5f317c912f08b5212fd69a';
            },
            handleFormatError (file) {
                this.$Notice.warning({
                    title: 'The file format is incorrect',
                    desc: 'File format of ' + file.name + ' is incorrect, please select jpg or png.'
                });
            },
            handleMaxSize (file) {
                this.$Notice.warning({
                    title: 'Exceeding file size limit',
                    desc: 'File  ' + file.name + ' is too large, no more than 2M.'
                });
            },
            handleBeforeUpload () {
                const check = this.uploadList.length < 5;
                if (!check) {
                    this.$Notice.warning({
                        title: 'Up to five pictures can be uploaded.'
                    });
                }
                return check;
            }
        },
        mounted () {
            this.uploadList = this.$refs.upload.fileList;
        }
    }
</script>
<style lang="scss">
    @import "~common/sass/variables";
    @import "~common/sass/mixin";

    /* variables */
    $loader-view-size: 300px;

    .uploader{
        position: relative;
        display: block;
        text-align: center;
        width: $loader-view-size;
        height: $loader-view-size;
        border-radius: 4px;
        overflow: hidden;
        background: #fff;
        box-shadow: 0 1px 1px rgba(0,0,0,.2);
        &:hover{
            cursor: pointer;
        }
        .uploader-view{
            @include full;
            position: absolute;
            z-index: 10;
            &:hover{
                .uploader-view-cover{
                    @include flex-center;
                }
            }
            img{
                width: 100%;
                height: 100%;
            }
            .uploader-view-cover{
                display: none;
                position: absolute;
                top: 0;
                bottom: 0;
                left: 0;
                right: 0;
                background: rgba(0,0,0,.6);
                i{
                    display: inline-block;
                    color: #fff;
                    font-size: 60px;
                    cursor: pointer;
                    margin: 0 2px;
                    &:nth-child(1){
                        margin-right: 40px;
                    }
                }
            }
        }
        .uploader-control{
            @include full;
            position: absolute;
            z-index: 9;
            .ivu-upload{
                @include full;
                .uploader-input{
                    @include full;
                    i{
                        @include trans-center;
                        font-size: 80px;
                    }
                }
            }

        }
    }
</style>



